package com.xbongbong.pay.platform.wechatpay.pojo.response;

import com.alibaba.fastjson.annotation.JSONField;
import lombok.Getter;
import lombok.Setter;

import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.io.Serializable;
/**
 *
 * @author 魏荣杰
 * @date 2021/2/2 17:30
 * @since
 * @version
 */
@Setter
@Getter
public class WeChatRefundNoticeResource implements Serializable {
    private static final long serialVersionUID = -8866832094546395194L;

    /**
     * 直连商户的商户号，由微信支付生成并下发。
     * 示例值：1900000100
     */
    @NotNull
    @Size(min = 1, max = 32)
    @JSONField(name = "mchid")
    private String mchId;
    /**
     * 返回的商户订单号
     * 示例值： 1217752501201407033233368018
     */
    @NotNull
    @Size(min = 1, max = 32)
    @JSONField(name = "out_trade_no")
    private String outTradeNo;
    /**
     * 微信支付订单号
     * 示例值： 1217752501201407033233368018
     */
    @NotNull
    @Size(min = 1, max = 32)
    @JSONField(name = "transaction_id")
    private String transactionId;
    /**
     * 商户退款单号
     * 示例值： 1217752501201407033233368018
     */
    @NotNull
    @Size(min = 1, max = 64)
    @JSONField(name = "out_refund_no")
    private String outRefundNo;
    /**
     * 微信退款单号
     * 示例值： 1217752501201407033233368018
     */
    @NotNull
    @Size(min = 1, max = 32)
    @JSONField(name = "refund_id")
    private String refundId;

    /**
     * 退款状态，枚举值：
     * SUCCESS：退款成功
     * CLOSE：退款关闭
     * ABNORMAL：退款异常，退款到银行发现用户的卡作废或者冻结了，导致原路退款银行卡失败，可前往【服务商平台—>交易中心】，手动处理此笔退款
     * 示例值：SUCCESS
     */
    @NotNull
    @Size(min = 1, max = 6)
    @JSONField(name = "refund_status")
    private String refundStatus;
    /**
     * 1、退款成功时间，遵循rfc3339标准格式，格式为YYYY-MM-DDTHH:mm:ss+TIMEZONE，YYYY-MM-DD表示年月日，T出现在字符串中，表示time元素的开头，HH:mm:ss表示时分秒，TIMEZONE表示时区（+08:00表示东八区时间，领先UTC 8小时，即北京时间）。例如：2015-05-20T13:29:35+08:00表示，北京时间2015年5月20日13点29分35秒。
     * 2、当退款状态为退款成功时返回此参数。
     * 示例值：2018-06-08T10:34:56+08:00
     */
    @NotNull
    @Size(min = 1, max = 64)
    @JSONField(name = "success_time")
    private String successTime;
    /**
     * 取当前退款单的退款入账方。
     * 1、退回银行卡：{银行名称}{卡类型}{卡尾号}
     * 2、退回支付用户零钱: 支付用户零钱
     * 3、退还商户: 商户基本账户、商户结算银行账户
     * 4、退回支付用户零钱通：支付用户零钱通
     * 示例值：招商银行信用卡0403
     */
    @NotNull
    @Size(min = 1, max = 64)
    @JSONField(name = "user_received_account")
    private String userReceivedAccount;

    /**
     * 	金额信息
     */
    @NotNull
    @Valid
    private Amount amount;

    @Setter
    @Getter
    public static class Amount {
        /**
         * 订单总金额，单位为分，只能为整数，详见支付金额
         * 示例值：999
         */
        @NotNull
        private Integer total;
        /**
         * 退款金额，币种的最小单位，只能为整数，不能超过原订单支付金额，如果有使用券，后台会按比例退。
         * 示例值：999
         */
        @NotNull
        private Integer refund;
        /**
         * 用户实际支付金额，单位为分，只能为整数，详见支付金额
         * 示例值：999
         */
        @NotNull
        @JSONField(name = "payer_total")
        private Integer payerTotal;

        /**
         * 退款给用户的金额，不包含所有优惠券金额
         * 示例值：999
         */
        @NotNull
        @JSONField(name = "payer_refund")
        private Integer payerRefund;
    }
}
